草庐IT

Python 实例变量作为默认参数

全部标签

ruby - 从 Ruby 中包含的文件访问变量

如何访问包含文件中定义的变量?#inc.rbfoo="bar";#main.rbrequire'inc.rb'putsfoo#NameError:undefinedlocalvariableormethod`foo'formain:Object 最佳答案 您无法访问其定义范围之外的本地文件——在本例中为文件。如果您想要跨文件边界的变量,请将它们设为局部变量。$foo、Foo和@foo都可以。如果你真的不想在符号上放置任何类型的装饰(可能因为你不喜欢它的读法),一个常见的hack就是将它定义为一个方法:deffoo()"bar"end

ruby - 通过方法调用时如何将参数传递给proc?

proc=Proc.newdo|name|puts"Thankyou#{name}!"enddefthankyieldendproc.call#outputnothing,justfineproc.call('God')#=>ThankyouGod!thank&proc#outputnothing,too.Fine;thank&proc('God')#Error!thank&proc.call('God')#Error!thankproc.call('God')#Error!#So,whatshouldIdoifIhavetopassthe'God'totheprocandusethe

ruby-on-rails - Ruby on Rails - 回形针和动态参数

我正在使用Paperclip为RubyonRails编写一些图像上传代码,我有一个可行的解决方案,但它非常老套,所以我非常感谢有关如何更好地实现它的建议。我有一个“Assets”类,其中包含有关上传图像(包括回形针附件)的信息,以及一个封装尺寸信息的“生成器”类。每个“项目”都有多个Assets和生成器;所有Assets都应根据每个生成器指定的大小进行调整;因此,每个项目都有其所有Assets都应具有的一组特定大小。发电机型号:classGeneratorAssets模型:classAssetlambda{|a|a.instance.styles}belongs_to:project#

ruby - 使用默认值初始化散列并递增 1

我需要一个散列,其键的默认值应为0。(基本上我正在制作一个计数器)。key未知,所以我无法在开始时初始化它们。同样,每次出现该键时,该值都应增加1。我想出了这个:hash={}hash[key]?hash[key]+=1:hash[key]=0这看起来不错而且简短,但我不喜欢在一行代码中重复多次hash[key]。有没有更好的写法? 最佳答案 我想你只需要给散列一个默认值0hash=Hash.new(0)然后对于每次出现的键,你不需要检查它的值,直接增加它:hash[key]+=1引用:Hash#new.

Ruby,哪个异常最适合处理未设置的环境变量?

我编写的脚本在启动时运行,需要设置环境变量,但是Ruby的Exceptions,是最好的?我使用了LoadError,我只是想尽可能具有描述性并遵循适当的约定。其次,除了检查环境变量的长度外,我找不到其他方法来查看是否设置了环境变量,但这似乎不太优雅。beginraiseLoadErrorifENV['FOO'].to_s.length==0system"openhttp://example.com/"+ENV['FOO']rescueException=>eputs"=>#{e}FOOenvironmentvariablenotset"end 最佳答案

ruby-on-rails - 如何在 Ruby on Rails 中执行期间确定 Controller 变量的值?

在执行期间确定Controller变量值的最佳方法是什么?例如,有没有办法在代码中插入一个中断,并使变量的值输出到屏幕(或日志)? 最佳答案 是的。最简单的方法是将值提升为字符串。像这样:raise@foo.to_s或者,您可以安装调试器(geminstallruby​​-debug),然后使用--debugger标志启动开发服务器。然后,在您的代码中,调用debugger指令。在调试器提示中,您有许多命令,包括打印变量值的p。更新:这里是abitmoreaboutruby-debug.

ruby - 在 rspec 测试中填充实例变量

我有一个具有以下初始化方法的类。definitialize(my_var)@my_var=my_varend然后我想测试对@my_var做些什么的方法defsplit@my_var.split(",")end如何在测试它正确返回数组之前更改@my_var?如果没有@my_var的访问器,这是可能的吗? 最佳答案 这听起来不像是正确的做法。Rspec应该测试类和模型的接口(interface)行为——而不是内部实现(无疑是实例变量)。有多种方法可以做到这一点,但您确定不想为该变量设置访问器吗?无论如何,您可以使用my_object.i

ruby - block 中局部变量的作用域

如果我有:2.timesdoi||=1print"#{i}"i+=1print"#{i}"end我得到了1212,而我期待的是1223。为什么i在循环重新开始时丢失了它的赋值?如果赋值发生在循环外,它的行为符合预期,所以我猜它与范围有关,但我没有意识到循环有自己的范围。有人可以澄清一下吗?更新:感谢您对此的帮助。我的部分困惑源于从Python转向Ruby,Python没有block作用域(我认为)。 最佳答案 我不知道您的期望是基于什么。如果你认为我认为你认为,它应该是1223。您可以通过在block外声明变量i来实现。i=nil2

ruby - 将局部变量从 Controller 传递给 View

由于某些原因,我无法将局部变量传递给显示View...在我的Controller中,我只是:defshowrendertemplate:"books/show",:resource=>"Sometext"end在我看来,我打印了以下内容:Mylocalvariabletext:我收到以下消息:undefinedlocalvariableormethod`resource'for#:0x00000118ec3498>我在Controller中尝试了以下语法:rendertemplate:"books/show",locals:{resource:"Sometext"}rendertemp

ruby - 使用 heredoc 作为哈希值

我有一个方法Embed.toggler接受哈希参数。使用以下代码,我试图在哈希中使用heredoc。Embed.toggler({title:但是,我得到以下错误跟踪:syntaxerror,unexpected':',expectingtSTRING_DENDcontent:content^can'tfindstring"RUBY"anywherebeforeEOFsyntaxerror,unexpectedend-of-input,expectingtSTRING_CONTENTortSTRING_DBEGortSTRING_DVARortSTRING_ENDtitle:如何避免出